/**
 * create by young (young2f@outlook.com) on 2023/4/16
 */
'use strict';
const _stringUtils = require('../utils/stringUtils');
const _fileUtils = require('../utils/fileUtils');
const _ = require('lodash');
const paymentTreeInitArray = [
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '采购付款',
    'treeId': 'TRE-PROCURE-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '差旅付款',
    'treeId': 'TRE-REIMBURSE-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '主成本付款',
    'treeId': 'TRE-MAIN-COST-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '辅材付款',
    'treeId': 'TRE-AUX-MATERIAL-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '运费付款',
    'treeId': 'TRE-SHIPPING-FEE-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '公关付款',
    'treeId': 'TRE-PUBLIC-FEE-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '卸货费用付款',
    'treeId': 'TRE-LOAD-FEE-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
  {
    'table': 'payment',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '劳务付款',
    'treeId': 'TRE-LABOR-FEE-PAY',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
];
const receiptTreeInitArray = [
  {
    'table': 'receipt',
    'createUser': 'admin',
    'createUsername': 'admin',
    'title': {
      'label': '',
      'color': '#22f'
    },
    'tenantCode': 'TEN250429020943B7AB',
    'editable': false,
    'name': '销售收入',
    'treeId': 'TRESALESRECEIPT',
    'level': 0,
    'tenantName': '镇江蓝海化工',
    'path': '/',
  },
];
const personnelTreeBase = {
  'table': 'personnel',
  'createUser': 'admin',
  'createUsername': 'admin',
  'title': {
    'label': '',
    'color': '#22f'
  },
  'tenantCode': 'TEN250429020943B7AB',
  'editable': false,
  'name': '奖惩表',
  'treeId': 'TREE_PERSONNEL_JC',
  'level': 0,
  'tenantName': '镇江蓝海化工',
  'path': '/',
};
const personnelTreeInitArray = [
  { 'name': '奖惩表', 'treeId': 'DicPerRewardsAndPunishments', },
  { 'name': '考勤表', 'treeId': 'DicPerAttendance', },
  { 'name': '任务绩效考核表', 'treeId': 'DicPerTaskKPI', },
  { 'name': '工资单', 'treeId': 'DicPerPayroll', },
  { 'name': '工作绩效考核表', 'treeId': 'DicPerWorkKPI', },
  { 'name': '加班单', 'treeId': 'DicPerWorkOvertime', },
  { 'name': '评分表', 'treeId': 'DicPerScore', },
  { 'name': '工作量登记表', 'treeId': 'DicPerWorkload', },

];
module.exports = class {
  constructor(app) {
    this.app = app;
    this.config = app.config;
  }

  async suInit() {
    const user = await this.app.dbs.find('User', { userType: 'su' });

    if (user && user.length) {
      return;
    }
    const su = {
      username: 'super_admin',
      userType: 'su',
      password: _stringUtils.getCryptoPassword('afei@168'),
      isAdmin: true,
      isDeleted: false,
      tenantCode: _stringUtils.getCode('TEN'),
      userCode: _stringUtils.getCode('HM')
    };
    return this.app.dbs.insert('User', su);
  }

  async initLabelDb(tenantCode, tenantName) {
    /**
     * 设备档案的初始字段
     */
    const initFile = this.app.config.infoPath + '/initLabel.json';
    let array = await _fileUtils.isExist(initFile) ? await _fileUtils.readFile2json(initFile) : initLabels;
    _.map(array, async item => {
      item.tenantCode = tenantCode;
      item.tenantName = tenantName;
      await this.app.dbs.insert('DLabel', item);
    });
  }

  async initTenantPersonnelDicTree() {
    const tenant = await this.app.dbs.find('Tenant', {});
    _.map(tenant, async item => {
      const { tenantCode, tenantName } = item;
      const res = await this.initPersonnelTree(tenantCode, tenantName);
    });
  }

  async initPersonnelTree(tenantCode, tenantName) {
    personnelTreeBase.tenantCode = tenantCode;
    personnelTreeBase.tenantName = tenantName;
    const initTree = await this.app.dbs.find('Tree', { table: 'personnel', editable: false, tenantCode });

    _.map(personnelTreeInitArray, async item => {
      const temp = _.find(initTree, it => {
        return item.treeId === it.treeId;
      });

      if (!temp) {
        personnelTreeBase.treeId = item.treeId;
        personnelTreeBase.name = item.name;

        const res = await this.app.dbs.insert('Tree', personnelTreeBase);
      }
    });


  }

  async initTenantFinanceTree() {
    const tenant = await this.app.dbs.find('Tenant', {});
    _.map(tenant, async item => {
      const { tenantCode, tenantName } = item;
      const res = await this.initFinanceTree(tenantCode, tenantName);
    });
  }

  async initFinanceTree(tenantCode, tenantName) {

    return;
    /**
     * 初始化付款记录表目录
     */
    const initTree = await this.app.dbs.find('Tree', { table: 'payment', editable: false, tenantCode });

    _.map(paymentTreeInitArray, async item => {
      const temp = _.find(initTree, it => {
        return item.treeId === it.treeId;
      });
      if (!temp) {

        const res = await this.app.dbs.insert('Tree', item);
      }
    });

    const receiptTree = await this.app.dbs.find('Tree', { table: 'receipt', editable: false, tenantCode });
    _.map(receiptTreeInitArray, async item => {
      const temp = _.find(receiptTree, it => {
        return item.treeId === it.treeId;
      });
      if (!temp) {
        item.tenantCode = tenantCode;
        item.tenantName = tenantName;
        const res = await this.app.dbs.insert('Tree', item);
      }
    });
  }

  //   if (initTree.length === 0) {
  //     _.map(paymentTreeInitArray, async item => {
  //       item.tenantCode = tenantCode;
  //       item.tenantName = tenantName;
  //       const res = await this.app.dbs.insert('Tree', item);
  //     });
  //   } else {
  //     _.map(paymentTreeInitArray, async item => {
  //       const temp = _.find(initTree, it => {
  //         return item.treeId === it.treeId;
  //       });
  //       if (!temp) {
  //         item.tenantCode = tenantCode;
  //         item.tenantName = tenantName;
  //         const res = await this.app.dbs.insert('Tree', item);
  //       }
  //     });
  //   }
  //   /**
  //    * 初始化付款申请表目录
  //    */
  //   const apply = await this.app.dbs.find('Tree', { table: 'paymentApply', editable: false });
  //   if (apply.length === 0) {
  //     _.map(paymentTreeInitArray, async item => {
  //       item.tenantCode = tenantCode;
  //       item.tenantName = tenantName;
  //       item.table = 'paymentApply';
  //       const res = await this.app.dbs.insert('Tree', item);
  //     });
  //   } else {
  //     _.map(paymentTreeInitArray, async item => {
  //       const temp = _.find(apply, it => {
  //         return item.treeId === it.treeId;
  //       });
  //       if (!temp) {
  //         item.tenantCode = tenantCode;
  //         item.tenantName = tenantName;
  //         item.table = 'paymentApply';
  //         const res = await this.app.dbs.insert('Tree', item);
  //       }
  //     });
  //   }
  //   /**
  //    * 初始化付款申请审核表目录
  //    */
  //   const applyReview = await this.app.dbs.find('Tree', { table: 'payReview', editable: false });
  //   if (applyReview.length === 0) {
  //     _.map(paymentTreeInitArray, async item => {
  //       item.tenantCode = tenantCode;
  //       item.tenantName = tenantName;
  //       item.table = 'payReview';
  //       const res = await this.app.dbs.insert('Tree', item);
  //     });
  //   } else {
  //     _.map(paymentTreeInitArray, async item => {
  //       const temp = _.find(applyReview, it => {
  //         return item.treeId === it.treeId;
  //       });
  //       if (!temp) {
  //         item.tenantCode = tenantCode;
  //         item.tenantName = tenantName;
  //         item.table = 'payReview';
  //         const res = await this.app.dbs.insert('Tree', item);
  //       }
  //     });
  //   }
  //   /**
  //    * 初始化收款记录表目录
  //    */
  //   const receInit = await this.app.dbs.find('Tree', { table: 'receipt', editable: false });
  //
  //   if (receInit.length === 0) {
  //     _.map(receiptTreeInitArray, async item => {
  //       const res = await this.app.dbs.insert('Tree', item);
  //     });
  //   }
  //   if (receInit.length === 0) {
  //     _.map(receiptTreeInitArray, async item => {
  //       item.tenantCode = tenantCode;
  //       item.tenantName = tenantName;
  //       const res = await this.app.dbs.insert('Tree', item);
  //     });
  //   } else {
  //     _.map(receiptTreeInitArray, async item => {
  //       const temp = _.find(receInit, it => {
  //         return item.treeId === it.treeId;
  //       });
  //       if (!temp) {
  //         item.tenantCode = tenantCode;
  //         item.tenantName = tenantName;
  //         const res = await this.app.dbs.insert('Tree', item);
  //       }
  //     });
  //   }
  // }
};

const initLabels = [
  {
    'isDeleted': false,
    'enableArea': [
      'table',
      'detail',
      'search'
    ],
    'selectOption': 'material',
    'required': true,
    'title': '',
    'key': 'code',
    'label': '订单编码',
    'type': 'String',
    'inputType': 'input',
    'table': 'salesOrder',
    'isCode': true,
    'isInitKey': true
  },
  {
    'isDeleted': false,
    'enableArea': [
      'table',
      'detail',
      'search'
    ],
    'selectOption': 'material',
    'required': true,
    'title': '',
    'key': 'materName',
    'label': '物料',
    'type': 'String',
    'inputType': 'selectOption',
    'table': 'salesOrder',
    'isInitKey': true
  }
  ,

  {
    'isDeleted': false,
    'enableArea': [
      'table',
      'detail',
      'search'
    ],
    'selectOption': 'material',
    'required': true,
    'title': '',
    'key': 'code',
    'label': '采购单编码',
    'type': 'String',
    'inputType': 'input',
    'table': 'procureOrder',
    'isCode': true,
    'isInitKey': true
  }
  ,
  {
    'isDeleted': false,
    'enableArea': [
      'table',
      'detail',
      'search'
    ],
    'selectOption': 'material',
    'required': true,
    'title': '',
    'key': 'code',
    'label': '物料编码',
    'type': 'String',
    'inputType': 'input',
    'table': 'material',
    'isCode': true,
    'isInitKey': true
  },
  {
    'isDeleted': false,
    'enableArea': [
      'table',
      'detail',
      'search'
    ],
    'selectOption': 'material',
    'required': true,
    'title': '',
    'key': 'name',
    'label': '物料名称',
    'type': 'String',
    'inputType': 'input',
    'table': 'material',
    'isInitKey': true
  }
];

